!% -SD !============================================================================ Constant Story "Wraakzucht"; Constant Headline "^Het Interactieve Fictie debuut van Victor Gijsbers.^ Dit werk wordt gepubliceerd onder de GNU General Public License, versie 2.^ (Zie: http://www.gnu.org/licenses/gpl.txt)^"; Release 101; Serial "000000"; ! for keeping track of public releases !Constant MAX_SCORE = 10; Constant DEATH_MENTION_UNDO; Constant NO_SCORE; Include "Parser"; Include "VerbLib"; !============================================================================ ! Object classes Class Prop with before [; Examine: return false; default: print_ret "Je hoeft je niet bezig te houden met ", (the) self, "."; ], has scenery; Class Furniture with before [; Take,Pull,Push,PushDir: print_ret (The) self, "is daar te zwaar voor."; ], has static supporter; !============================================================================ ! The game objects !---------------------------------------------------------------------------- ! *** The corridor where the game starts *** !---------------------------------------------------------------------------- Object corridor_1 "Donkere gang" with name 'gang' 'donkere' 'hal', description [;if(emotions.rage == 0) { print "De lage, duistere gang leidt van de arena naar het cellencomplex. Halverwege bevindt zich een ijzeren hek waarachter zich een trap omhoog bevindt, die naar de rest van meester Haran Damaskos' landhuis voert. De zware natuurstenen muren houden je lichaam gevangen en bedrukken je geest. Af en toe valt er een druppel van het plafond naar de rotsige grond."; if(self hasnt visited) {print "^^Twee wachters sleuren je aan je bovenarmen mee terug naar de cel waarin je al drie jaar leeft.";}; return true; } else { print "Deze nauwe gang is je kooi. Aan de ene kant liggen de cellen waarin ze je steeds als een beest hebben opgesloten, aan de andere kant de arena waar jij zoveel onschuldig bloed hebt moeten verspillen. Onwillekeurig spannen je spieren zich."; if(gate has open) { "Een open ijzeren hek halverwege de gang geeft toegang tot een trap omhoog."; } else { if(haran.death == 1){ "Een zwaar ijzeren hek halverwege de gang verspert de doorgang naar een trap omhoog."; } else { "Een zwaar ijzeren hek halverwege de gang verspert de doorgang naar een trap omhoog. Het is het enige dat tussen jouw en Haran's dood staat."; }; }; }; ], has light; Prop cor_1_walls "muren" corridor_1 with name 'muur' 'muren', description [; if(emotions.rage == 0) { "De muren zijn dik, vochtig en kil. De stenen sluiten zeer goed op elkaar aan, zodat het onmogelijk is er een tussenuit te wrikken."; } else { "Hard en meedogenloos. De muren vormen een gevangenis."; }; ], before [; Attack: if(emotions.rage == 0) { "Het heeft geen enkele zin de keiharde muren aan te vallen."; } else { if(parent(bar) == player) { if (guards.dead == 0){ "Met een waanzinnige grijns op je gezicht sla je zachtjes een paar keer met de ijzeren staaf tegen de muur. In de gespannen stilte klinkt het droge geluid klinkt als een klok die de laatste seconden van de levens van je aanvallers wegtikt. Je ziet hun knokkels wit worden als ze hun zwaarden nog steviger vastgrijpen."; } else { deadflag = 3; print "Met de zware ijzeren staaf in je handen geklemd sla je woedend tegen de muur. De kracht van slag doet een scheut van pijn door je handen gaan, maar op de stenen is geen schram te zijn. Je moet ontsnappen! Ze kunnen je hier niet langer houden! Vervuld van de dierlijke kracht die in het hart van je woede huist, zwaai je keer op keer de staaf tegen de muur aan. Bij elke slag weerklinkt het geluid van metaal op steen door de gang. Als in trance blijf je zwaaien. Alleen de stekende en steeds toenemende pijn in je armen en handen houdt je bezig; het lawaai van stemmen en rennende voetstappen dat uit de richting van het cellencomplex komt dringt niet tot je door. Kleine schilfers steen vliegen door de ruimte. ^ De ijzeren staaf buigt bij elke slag iets verder door, tot hij plotseling in tweeën breekt. Op datzelfde moment stormen vier wachters de gang in, getrokken zwaarden in hun handen. Je aangezicht verwrongen tot een onmenselijk masker stoot je een kreet van haat die de wereld in stukken lijkt te scheuren. Eén enkele gedachte vult je geest:"; style bold; print "STERF!"; style roman; "^ ^ Je laatste ervaringen zijn van scherpe pijn en een wereld in rood."; } } else { if (guards.attacking == 0 && guards.dead == 0) { guards.loose(); return false; }; print "Je stompt een van de muren hard met je gebalde vuist. Het doet pijn, maar je vertrekt geen spier. Door de pijn voel je je levend."; return true; }; }; ], has pluralname; Prop "stenen" corridor_1 with name 'steen' 'stenen', description [; if(emotions.rage == 0) { "De muren zijn opgetrokken uit grijze natuursteen. De stenen sluiten zeer goed op elkaar aan, zodat het onmogelijk lijkt er een tussenuit te wrikken."; } else { "Deze stenen zijn gehouwen uit het hardste graniet. Je zou ze graag besmeurd zien met de hersenen van Haran."; }; ], before [; Attack: <>; ], has pluralname; Object gate "ijzeren hek" corridor_1 with name 'ijzeren' 'hek' 'deur' 'poort', bar_present 1, before [; Examine: if(self.bar_present == 0) { "Dit zware ijzeren hek scheidt de cellen en de arena van het eigenlijke landhuis. Twee gebogen stukken roestig metaal geven aan waar jij er een staaf vanaf hebt getrokken."; } else { "Dit zware ijzeren hek scheidt de cellen en de arena van het eigenlijke landhuis. Eén van de staven is op twee plekken bijna doorgeroest. Met voldoende kracht zou hij misschien losgetrokken kunnen worden."; }; Attack, Pull, Push, Take: if(self.bar_present == 1) { <>; } else { if(emotions.rage == 0) { "Het hek ziet er verder heel stevig uit. Het zal je niet lukken het kapot te maken."; } else { guards.loose(); "Je grijpt het zware ijzeren hek met beide handen beet en probeert het in stukken te trekken. Je spieren zwellen op, zweet verschijnt op je voorhoofd, maar in de staven zit geen beweging. Na een paar minten moet je je gewonnen geven."; } }; ], with_key gate_key, door_dir e_to u_to, door_to hallway, has scenery door lockable openable locked; Object bar "ijzeren staaf" corridor_1 with name 'ijzeren' 'staaf' 'staven' 'pijp' 'knots' 'stang', description [; if(emotions.rage == 0) { "Een zware ijzeren staaf, ongeveer tachtig centimeter lang en vijf kilo zwaar. De uiteinden zijn roestig, en alleen een laatste paar schilfertjes verf zijn nog te zien."; } else { "Een zware ijzeren staaf waarmee je harder en verder kan slaan dan met je blote handen. Geen schedel overleeft een goede klap met dit wapen."; } ], before [; Take, Pull, Attack: if(gate.bar_present == 1) { if(emotions.rage == 0) { guards.loose(); "You grab the iron bar and pull with all your might - but it hardly budges. Your muscles feel tired and weak, as they always do between fights. It is only when you enter the pits, hearing the cries of Lord Haran and his guests, that your blood starts boiling and you are filled with the power to break bones and tear bodies apart. Your strength lies in your hate. ^ Maybe you should go into a rage."; } else { move bar to player; gate.bar_present = 0; give bar ~scenery; guards.loose(); "With a bloodthirsty cry, you grab the iron bar and tear it loose as if it were made of paper. You hear the guards behind you gasp. Fast as lightning you turn around. ^ ~It's time to die,~ you hiss."; } } else { return false; }; ], has scenery; Object guards "guards" corridor_1 with name 'two' 'guard' 'guards' 'man' 'men' 'keeper' 'keepers' 'goaler' 'goalers' 'Roger' 'Frank', dead 0, description [; if(self.attacking == 0) { if (emotions.rage == 0) { "The guards, Frank and Roger, are talking about their children. Apparently, Roger's seven year old son is afflicted with a mysterious disease and the doctors fear for his life. They are so engrossed in this subject that they do not seem to be paying you very much attention. Both have a sword hanging from their belt, which they can probably reach much faster than you."; } else { "Two of the cruel goalers that hold you captive. You remember vividly how one of them beat a young slave who was too scared to fight to death with the side of his sword. The young boy's cries of pain and despair mixed with the sickening sound of cracking bones still echo in your mind."; } } else { if (emotions.rage == 0) { "Both men have drawn their swords and are carefully advancing towards you, neither of the two eager to strike the first blow and expose himself to you. Frank is a bit of a coward, always trying to intimidate the slaves with words but never actually carrying out any of his threats. You expect Roger to attack first."; } else { "Your eyes are first drawn towards the glistening tips of their sharp swords, but soon find their way upwards to the guards' eyes. As they look into yours and see the passionate hate that courses through your being, they hold back for a moment. Their eyes betray fear. You bare your teeth."; } }; ], life [; Kiss: if (emotions.rage == 0) { "Tenderness will not make them release you."; } else { "You are not a succubus!"; }; Give: if (emotions.rage == 0) { "The guards cannot be bribed with presents."; } else { "The only present they'll receive from you is a swift death."; }; Ask, Tell, Answer, Order: if (emotions.rage == 0) { "This is not the time for conversation."; } else { "You cry in wordless rage."; }; Show: if (emotions.rage == 1 && guards.attacking == 1) { if (noun == bar) { "You wave the iron bar in front of the guards, daring them to come closer."; } return false; }; return false; ThrowAt: if (noun == bar) { "No. It would be more satisfying to hit them with it."; }; return false; Attack: if (emotions.rage == 0) { if (parent(bar) == player) { "You do not feel strong enough to kill the guards. [And if you get here, its a BUG!]"; } else { "Attacking them with your bare hands is not going to work. You need a weapon first, preferably a sharp or heavy one."; }; } else { if (guards.attacking == 0) { deadflag = 3; "With a sudden jerk you free yourself from the grip of the guards. Turning to the one on your left, you grab his head in both your hands and smash it against the wall as hard you can. Blood spatters all around. He struggles feebly, but you hardly feel his pounding fists against your chest as you keep hitting his head against the hard grey stones. The fourth impact is accompanied by the sound of breaking bone. The pounding stops and the body goes limp in your arms. The guard's eyes bulge out of his head in an unnatural way, like those of a surprised, dead fish. Vengeance. ^^ Suddenly, you feel a sharp, breath-taking pain. Four inches of sharp steel protrude from your chest. ~You bastard, you killed Frank!~ screams the guard behind you. You open your mouth to cry out your pain, but all you can do is cough up blood. You collapse to the ground, and all goes dark."; } else { if (parent(bar) == player){ "[Player attacks attacking guards with iron bar. TODO]"; } else{ deadflag =3; print "You can no longer restrain yourself. The two blinking silver tips of the drawn swords flicker as the eyes of a malicious beast, mocking your righteous anger. You growl, a low rumbling sound coming from the depths of your being. The beast comes closer, and suddenly you ";style bold; print "pounce"; style roman; ", your arms outstretched, your hands like claws. The eyes rise to meet you, and the world explodes. Stars fill the void, blinking, then disappearing one by one. Only darkness remains. Where is your attacker? Once more a growl escapes from your mouth, as you cast about for the object of your rage. ^ But then a terrible weariness falls over you like a heavy blanket, muffling thought and emotion alike. You drift away into a deep sleep.^"; }; }; }; ], counter1 0, counter2 0, daemon [; if(self.attacking == 0){ switch(++self.counter1){ 1 to 2: "^The guards are dragging you through the corridor."; 3 : "^The guards have already led you halfway through."; 4 : "^You have almost reached the cells. If you wish to escape, you must act now."; default: deadflag = 3; "Tja. TODO."; } } else{ switch(++self.counter2){ 1: "Een!"; 2: "Twee!"; 3: "Drie!"; default: "Tja!"; } }; ], attacking 0, loose [; if(self.attacking == 1){return true}; print "Met een plotselinge ruk bevrijd je jezelf uit de greep van de wachters. Een fractie van een seconde zijn ze verbijsterd, dan schreeuwen ze en trekken hun zwaarden.^ "; self.attacking = 1; ], article "two", has animate pluralname scenery; Object sword "sword" corridor_1 with name 'sword' 'swords' 'Roger~s' 'Frank~s' 'guard~s' 'guards~', description , has concealed ; ! ------------------------------------------------------------------------------- ! *** Temporary objects *** Object gate_key "gatekey" with description "Nog niets."; Object hallway "hallway" with description "Nog niets."; Object haran with death, ; ! --------------------------------------------------------------------------- ! *** Abstract objects *** Object emotions with rage 0, !Zero when calm, One when raging satisfied 0, !One if currently raging AND having committed violence in this rage, Zero otherwise ; Object vengeance with counter 0, !Counts how much revenge has been exacted haranv 0, !whatever daughterv 0 !whatever ; !============================================================================ ! The player's possessions !============================================================================ ! Entry point routines [ Initialise; location = corridor_1; lookmode = 2; ! like the VERBOSE command player.description = "You are a strong, muscled man, covered with scars and bruises, wearing only rags."; StartDaemon(guards); print_ret "^Once you were quite the dandy, spending all your time and money on glamour, girls and gambling. Enraged by your behaviour, your father disinherited you, but you hardly cared. Life was too beautiful, the girls too lovely and the cards too much fun to worry about the future. But you learnt that one cannot escape society's demands as easily as that, and you learnt it the hard way. More than three years ago, you were seized by the Imperial Guard as you entered one of your favourite gaming dens. Your creditors demanded their money, and they wanted it instantly. As you could not pay and could find no rich friends or relatives to pay for you, the authorities decided to sell you into slavery. Unfortunately, you were bought by Lord Haran Damaskos, a man whose wealth is only surpassed by his passion for watching his slaves fight to the death. He thought it would be amusing to see a pampered aristocratic boy be slowly dismembered by a tough Nubian slave. But against all odds you survived that first fight, and continued surviving for these past three years. It is no exaggeration to say that you are now among the toughest of fighters. You have long lost track of the number of Lord Damaskos' parties you have had to brighten by spilling the innocent blood of fellow slaves to the wild cheers of the audience. Your life is a monotonous string of pain, violence and death. There is no hope of escape, and only your rage has kept you alive thus far. ^^ At least there was no hope of escape until now. For the two guards that are leading you back to your damp cell after yet another bloody fight in the pits, have forgotten to tie your hands. If you can grab a likely weapon and dispose of them before they lock you up again, you might be able to escape your predicament. Or better yet - you might be able to exact revenge upon your master.^"; ]; [ DeathMessage; print "You have failed to achieve your revenge!"; ]; !============================================================================ ! Standard and extended grammar Include "GrammarD"; !---------------------------------------------------------------------------- ! *** Rage and Calm *** [ RageSub; if(emotions.rage == 0) { emotions.rage = 1; "You release your hate and feel a wave of anger rise inside you, filling you with a burning desire for violence and revenge."; } else { "You are already filled with burning anger, ready to lash out at the slightest provocation."; }; ]; Verb 'rage' 'r' 'anger' 'enrage' 'mad' 'vengeful' * -> Rage; !Extend 'go' ! * 'in' 'rage' -> Rage ! * 'in' 'a' 'rage' -> Rage ! * 'into' 'rage' -> Rage ! * 'into' 'a' 'rage' -> Rage ! * 'mad' -> Rage; Verb 'become' * 'angry' -> Rage * 'enraged' -> Rage * 'mad' -> Rage * 'vengeful' -> Rage; !Extend 'enter' ! * 'rage' -> Rage; [ CalmSub; if(emotions.rage == 1){ if(emotions.satisfied == 1){ emotions.rage = 0; "You close your eyes, try to control your breath and silently count to twenty. Slowly the anger recedes, and you are once again in control of you violent urges."; } else { "You close your eyes, try to control your breath and silently count to twenty. But the rage is far too strong, and cannot be controlled. You need to lash out first."; }; } else { "You are already as serene and calm as can be reasonably expected given your present circumstances."; }; ]; Verb 'calm' 'cool' 'relax' 'serene' * -> Calm * 'down' -> Calm; !Extend 'exit' ! * 'rage' -> Calm; !Extend 'become' ! * 'calm' -> Calm ! * 'serene' -> Calm ! * 'cool' -> Calm ! * 'relaxed' -> Calm; !Extend 'go' ! * 'out' 'rage' -> Calm ! * 'out' 'of' 'rage' -> Calm; !--------------------------------------------------------------------------- ! *** Miscellaneous *** Verb 'grab' * noun -> Take; !============================================================================